# -*- coding: utf-8 -*-
# @Time : 2022/7/12 11:00
# @Author : Dftre
# @Email : 3066417822@qq.com
# @File : estimateError.py
# @Project : 代码生成器
import re

from .processor import Processor, GeneratorException


class Estimate(Processor):
    def __init__(self, if_list: list):
        super().__init__(r=re.compile(r'~\{([!&]\w+)}'))
        self.if_list = if_list

    def sub(self, text):
        var_list = set(self.r.findall(text))  # 找到本行中所有 ~{val} 中的 val
        text = self.r.sub('', text)
        for val in var_list:
            val = re.sub(r'\s', '', val)  # 去除值的无用字符
            if val[0] == '!':  # 处理 逻辑非
                if val[1:] in self.if_list:
                    text = ''
                else:
                    continue
            elif val[0] == '&':  # 处理 逻辑与
                if val[1:] in self.if_list:
                    continue
                else:
                    text = ''
            else:
                raise GeneratorException('EstimateError', "真值前无逻辑符号")
        return text
